UE5 Quest System
This page is part of the documentaiton for my UE5 Quest System

Quest Indicators

UE5 Quest System Version: 2.0

    What are Quest Indicators?

    Quest indicators are used to inform the player about Quest Actors (actors relevant to their quests). These actors may include those where quests are started from, completed, or used as quest objectives.

    When a relevant quest actor is detected near the player (based on settings), an indicator mesh is displayed above the actor. The color and mesh of this indicator symbolizes the Quest State, the Quest Type or the Quest Objective type.

    Quest indicators are controlled (specifically on the client side in multiplayer) through the AC_QuestSystem_PlayerController component. These indicators undergo re-evaluation at a frequency determined by the indicator scan speed you define on the AC_QuestSystem_PlayerControllercomponent attached to your player controller (see Settings below).

    During each re-evaluation, a scan is conducted for relevant actors associated with each active quest. An active quest is one where the Quest State is either Available, In Progress, or Ready to Turn In). If an actor is detected and within the player's range (also a configurable setting), the corresponding indicator is displayed. To maintain performance, the system also handles the removal of indicators that are out of range of the player.

    It's important to note that this indicator scan operates independently of the scan that searches for new quest-related actors in your level (handled in the World Quest Helper blueprint on the server), as well as the scan used to check for newly available quests based on prerequisites (this one is handled inside the AC_QuestSystem_PlayerState).

    Most Common Questions

    Timmy Dyno. I don't see the the quest indicator?!

    There are a number of moving parts for our quest indicator.

    For both Quest & Objective Indicators ...

    • Make sure you actually set the tag in both your data table, and your actor. For accept at use QuestAcceptAt, for complete at use QuestCompleteAt. For objectives use the Tag TargetData.
    • If you set any quest prerequisites, they may be stopping it from showing.
    • Make sure your indicator distance settings on the AC_QuestSystem_PlayerController are properly set to show the indicator within the distance you are expecting.
    • If you made changes to the meshes or materials of indicators you should reevaluate your changes in the BP_Quest_Indicator.
    • If you can see the indicator in singleplayer but not in multiplayer and you are manually adding tags at runtime, see the next question.

    For Objective Indicators ...

    • If you are using the Require Previous objective options make sure your previous objective are actually completed.
    • Check the objective prerequisites to see if one is keeping the objective from being available.
    • Check the Objective Options and make sure you did not enable the Hide Indicator.
    • If you are not using a custom objective indicator, make sure the field for custom indicator is empty.

    Timmy Dyno - I add / change my actor tags at runtime to mix up the availability on certain NPCs. When I do this in multiplayer games the indicators never show, how can I fix this?

    If you manually add / change your actor tags at runtime and you can see them in singleplayer but not in multiplayer then this means your actor tags are not replicating to the client. By default actor tags do not replicate (I don't know why).

    If you are adding them manually at runtime and running into this issue you should first consider embedding them in to your blueprint actor instead, this way they will be available on the clients.

    If this is not an option you can alternatively use a little helper component I included called AC_ReplicateActorTags which you can add to your actor after adding your tags, and it will handle replicating them for you. You should only use this as a last resort, if you absolutely can not add the tags to the blueprint. You can find this component in the Blueprints/Components/ folder.

    You are also going to need to re-check in your actor (or use the rescan features) after each change of your tags.


    Timmy DYNOOOOOooOOoo! I see the quest indicator, but it is not behaving like a quest actor, what is happening?!

    If you see the indicator but the actor is not acting like a Quest Actor (where you can't interact with it or it does not give credit), then this means your actor did not check in with the Quest World Helper, which is how they are associated with quests. We go over how to check in an actor on the Quest Actors page.

    If you do not check in your actor you can alternatively use the rescanning options. For accept and complete at actors the rescan option can be found in the Quest Options section. For quest objectives the rescan option can be found in the Objective Options.

    These rescanning options are expensive to use, so you should use them sparingly (or not at all). Instead of using rescanning I recommend instead calling the checkInActor on the Quest World Helper for the highest level of performance (learn more about checking in on the quest actors page.). This has the exact same effect but instead of the quest system constantly searching for new actors, you are just telling the quest system about the new actor when it is spawned.


    Indicator Settings

    Go to the AC_QuestSystem_PlayerControllercomponent you attached to your player controller and look at the Quest System Configuration area in the details panel. We already covered what each setting does in the Configuration part of the Installation chapter, but let's go over the settings related to indicators again:

    Indicator Scan Speed - The number of seconds between rescans for showing nearby quest indicators. This scan can not be disabled as it is needed for dynamic objectives and uses a distance threshold from the player. For multiplayer the indicator scan only occurs on the client.
    Indicator Visible Max Distance - The max distance (cm) from the player to show quest indicators.
    Indicator Animation Max Distance - The max distance (cm) from the player to play animations on quest indicators.
    Indicator Animation Mode - The animation mode for the indicator. By default it is set to Use Timeline which will provide the highest quality of animation but it is the most expensive when it comes to compute cost. You also have the option to set it to Use Timer (which is a balance between quality and cost), and if you need you can even set this value to Disabled to stop the Indicator animations. The animation that plays is set inside the Quest Indicator blueprint, and that chapter will go more into the styling of the indicator (which includes changing this animation).

    Indicator Static Meshes

    Open the BP_Quest_Indicator blueprint, found in the Blueprints/QuestIndicators folder. From here you can change the static meshes used for quest indicators. This is handled through 3 different variables depending on the use case:

    indicatorQuestState - This is where you define different indicators based on the quest's current state.
    indicatorCheckType - This map is how you change the indicator mesh based on the type of interaction with the actor, this is used to override the mesh used for the 'Accept at' and 'Complete at' interactions. By default they are set to match the ones set in indicatorQuestState for "Available" and "Ready to Turn In".
    indicatorObjectives - You can assign unique static meshes for each type of objective using this variable. Additionally, each objective can have its own custom Objective Indicator, a feature available in the Objective Options.

    To understand how these variables are applied, check out the RefreshIndicatorStyle function inside of this blueprint.

    Indicator Materials (Colors)

    In the BP_Quest_Indicator blueprint, which you'll find in the Blueprints/QuestIndicators/ folder, the getQuestTheme function determines the materials for the static meshes of the indicators. When you open this function, you'll see the use of map variables to implement various color themes, which are chosen based on the quest's state and type through switch and select nodes. If you want to customize the colors and create your own styles, you can copy one of the existing style variables, modify the materials, and then integrate your new variable into the appropriate place within this function.

    You will find the following themes included: goldTheme is used to style Main Story and Side Quest indicators when the quest is not in progress, silverTheme serves as the in-progress material used for all quest types, redTheme is for Failed Quest States, blueTheme indicates Repeatable Quests, and greenTheme is used for the Unique Quests.

    The theme used is mainly based on the quest's state, with considerable overlap across different quest types. For instance, all 'Ready to Turn In' states use the Gold Theme, while all 'Failed' states use the Red Theme.

    In the case of objectives, the theme is determined within the refreshIndicatorStyle function, where we apply colors based on the quest type. For example, objectives for repeatable quests are blue, and those for unique quests are green.

    If you opt for a custom objective indicator (via the objective options), the material theme won't apply. Instead, you'll need to set the materials directly on the mesh. This approach is used because your mesh might not have the same number of material slots, making it simpler for you to customize and manage based on the objective.

    Animations

    There are 3 animation modes which control how the animation is played, if played at all. The animation mode is a setting we configure on the AC_QuestSystem_PlayerControllercomponent. The 3 included animation modes are:

    Disabled - No animation is played.
    Use Timer - A timer is used to progress the animation, this is a balance between quality, options, and efficiency.
    Use Timeline - Provides the highest quality, at the highest expense. It also has the most options.

    Animation Profile

    The animation effect that is played is determined based on the state of the quest. You can change which effects are used by modifying the QuestStateAnimations variable found in the BP_Quest_Indicator blueprint. Each key in this map is the state, and the value is the animation's profile.

    The animation profile provides options to customize the animation effect. When you choose the Timeline animation mode, you can use all these settings. However, if you select the Timer animation mode, some settings won't apply. If a setting is exclusive to the Timeline animation mode, it will be noted below. Here's a list of the available options for each of your animation profiles:

    Animation - The animation's visual effect, which has the following options: Rotate X, Rotate Y, Rotate Z, Grow, Shrink, Hop, Hop & Spin, and Hop & Flip.
    Easing - (Timeline Only) Control the easing used when animating, the following options are available: Linear, Ease, Linear Ping Pong (play forward, then back), Ease Ping Pong, Linear Ping Pong Pause (play forward, pause, then play backwards), and Ease Ping Pong Pause.
    Playback Speed - (Timeline Only) Controls how fast or slow the animation effect is played.
    Playback Reverse - If enabled the animation will play backwards.
    Playback Looped - (Timeline Only) Controls if animation is looped. I'm not sure if this is even something people use, and I may deprecate this in the future. If you actually have a use for it please let me know.

    Objective Indicator Override

    Each objective can also have its own custom Objective Indicator, a feature available through the Quest Objective Options. This should be reserved for special occasions and used sparingly. Overuse can hurt the player ueser experience (less is more).

    Actor Specific Indicator Overrides

    The BPI_Quest_ActorOptions, when added to your actor, offers the ability to provide a location, rotation, and scale additive, giving you more control on the positioning and visibility of the quest indicators shown on that specific actor. We go over this in the Quest Actors section (next chapter).

    This documentation and asset version are new. If you encounter any bugs or if anything doesn't make sense, please let me know.